package com.shangcheng.server.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.shangcheng.dubbo.api.UmsMenuApi;
import com.shangcheng.model.domain.UmsMenu;
import com.shangcheng.model.vo.PageResult;
import com.shangcheng.model.vo.UmsMenuVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class UmsMenuService {

    @DubboReference
    private UmsMenuApi umsMenuApi;

    /**
     * 添加菜单
     *
     * @param umsMenu
     */
    public void create(UmsMenu umsMenu) {
        umsMenuApi.save(umsMenu);
    }

    /**
     * 删除数据
     *
     * @param id
     */
    public boolean delete(Integer id) {
        //1.查看此菜单下面是否还有别的菜单
        UmsMenu menu = umsMenuApi.findById(id);
        //2.判断是否存在,如果存在就进行判断下一级是否含有数据
        if (!ObjectUtil.isEmpty(menu)){
            //有数据,就进行二次判断
            List<UmsMenu> umsMenus = umsMenuApi.findByParentId(menu.getId());
            if (!CollUtil.isEmpty(umsMenus)){
                return false;
            }else {
                //可以删除
                umsMenuApi.delete(id);
                return true;
            }
        }else {
            return false;
        }
    }

    /**
     * 根据id进行数据的查找
     *
     * @param id
     * @return
     */
    public UmsMenu findById(Integer id) {
        return umsMenuApi.findById(id);
    }

    /**
     * 分页查询
     *
     * @param parentId
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageResult pageList(Integer parentId, Integer pageNum, Integer pageSize) {
        //1.得到分页数据
        IPage page = umsMenuApi.pageList(parentId, pageNum, pageSize);
        //2.对分页数据进行封装
        PageResult pr = new PageResult();
        pr.setList(page.getRecords());
        pr.setTotal(Convert.toInt(page.getTotal()));
        pr.setPageNum(pageNum);
        pr.setPageSize(pageSize);
        pr.setTotalPage(Convert.toInt(page.getPages()));
        return pr;
    }

    /**
     * 修改后台菜单
     *
     * @param id
     * @param umsMenu
     */
    public void update(Integer id, UmsMenu umsMenu) {
        //1.根据id进行查询数据
        UmsMenu menu = umsMenuApi.findById(id);
        if (ObjectUtil.isEmpty(menu)) return;
        umsMenu.setId(menu.getId());
        umsMenuApi.update(umsMenu);
    }

    /**
     * 修改菜单显示状态
     *
     * @param id
     * @param hidden
     */
    public void updateHidden(Integer id, Integer hidden) {
        //1.根据id进行查询数据
        UmsMenu umsMenu = umsMenuApi.findById(id);
        if (ObjectUtil.isEmpty(umsMenu)) return;
        umsMenu.setHidden(hidden);
        umsMenuApi.update(umsMenu);
    }

    /**
     * 树形结构返回所有菜单列表
     *
     * @return
     */
    public List<UmsMenuVo> treeList() {
        //1.得到一级菜单集合
        List<UmsMenu> parentUmsMenuList = umsMenuApi.findTreeList(0, 0);
        //2.创建List<UmsMenuVo>集合
        List<UmsMenuVo> parentUmsMenuVoList = new ArrayList<>();
        //3.得到对应的二级菜单
        for (UmsMenu umsMenu : parentUmsMenuList) {
            List<UmsMenu> childrenUmsMenuList = umsMenuApi.findTreeList(umsMenu.getId(), 1);
            UmsMenuVo vo = UmsMenuVo.init(umsMenu, childrenUmsMenuList);
            parentUmsMenuVoList.add(vo);
        }
        return parentUmsMenuVoList;
    }
}
